package editorsvg.editor.formas;

import editorsvg.editor.atributos.AtrLongitud;
import editorsvg.propiedades.GrupoPropiedades;
import editorsvg.propiedades.PropiedadDouble;
import java.awt.Shape;
import java.awt.geom.Line2D;
import java.awt.geom.Point2D;

/**
 *
 * @author Jorge Berjano
 */
public class Linea extends Forma {

    private AtrLongitud x1 = new AtrLongitud();
    private AtrLongitud y1 = new AtrLongitud();
    private AtrLongitud x2 = new AtrLongitud();
    private AtrLongitud y2 = new AtrLongitud();
    private Line2D linea = new Line2D.Double();
    private static GrupoPropiedades propiedadesForma;
    
    @Override
    public Object clone() throws CloneNotSupportedException {
        Linea clon = (Linea) super.clone();
        clon.x1 = (AtrLongitud) x1.clone();
        clon.y1 = (AtrLongitud) y1.clone();
        clon.x2 = (AtrLongitud) x2.clone();
        clon.y2 = (AtrLongitud) y2.clone();        
        clon.linea = (Line2D) linea.clone();
        return clon;
    }
         
    @Override
    public String getNombreTag() {
        return "line";
    }

    @Override
    public Shape getShape() {
        return linea;
    }

    @Override
    public void actualizar() {
        if (x1.getValor() == null || y1.getValor() == null || x2.getValor() == null || y2.getValor() == null) {
            return;
        }
        linea.setLine(x1.getValor(), y1.getValor(), x2.getValor(), y2.getValor());
    }
    
    public AtrLongitud x1() {
        return x1;
    }
     
    public AtrLongitud y1() {
        return y1;
    }
    
    public AtrLongitud x2() {
        return x2;
    }
     
    public AtrLongitud y2() {
        return y2;
    }

    public Point2D getPosicion1() {
        if (x1 == null || y1 == null) {
            return null;
        } else {
            return new Point2D.Double(x1.getValor(), y1.getValor());
        }
    }

    public Point2D getPosicion2() {
        if (x2.getValor() == null || y2.getValor() == null) {
            return null;
        } else {
            return new Point2D.Double(x2.getValor(), y2.getValor());
        }
    }

    public void setPosicion1(Point2D posicion) {
        x1.setValor(posicion.getX());
        y1.setValor(posicion.getY());
    }

    public void setPosicion2(Point2D posicion) {
        x2.setValor(posicion.getX());
        y2.setValor(posicion.getY());
    }
    
    public Double getX1() {
        return x1.getValor();
    }

    public Double getX2() {
        return x2.getValor();
    }

    public Double getY1() {
        return y1.getValor();
    }

    public Double getY2() {
        return y2.getValor();
    }

    @Override
    public GrupoPropiedades getPropiedades() {
        if (propiedadesForma == null) {
            propiedadesForma = new GrupoPropiedades("Linea");
            propiedadesForma.agregarPropiedad(new PropiedadDouble("x1"));
            propiedadesForma.agregarPropiedad(new PropiedadDouble("y1"));
            propiedadesForma.agregarPropiedad(new PropiedadDouble("x2"));
            propiedadesForma.agregarPropiedad(new PropiedadDouble("y2"));
        }
        return propiedadesForma;
    }
}
